# -*- coding: utf-8 -*-
# author: sixmillions
# date: 4/7/2022

"""
数据类型转换：只需要将数据类型作为函数名即可
隐式类型转换 - 自动完成
显式类型转换 - 需要使用类型函数来转换
"""

# 显式类型转换

# ####
# set([iterable]) 函数创建一个无序不重复元素集，可进行关系测试，删除重复数据，还可以计算交集、差集、并集等。
# iterable -- 可迭代对象对象；
# ####
# 空集合
print(1, set())  # 1 set()
# 去重
s1 = "sixmillions"
print(2, set(s1))  # 2 {'i', 'o', 'n', 'm', 'l', 'x', 's'}

# ####
# dict()  函数用于创建一个字典。
# class dict(**kwarg)           **kwargs -- 关键字。
# class dict(mapping, **kwarg)  mapping -- 元素的容器，映射类型（Mapping Types）是一种关联式的容器类型，它存储了对象与对象之间的映射关系。
# class dict(iterable, **kwarg) iterable -- 可迭代对象。
# ####
# 空字典
print(3, dict())  # 3 {}
# 传入关键字
print(4, dict(a='a', b='b', t='t'))  # 4 {'a': 'a', 'b': 'b', 't': 't'}
# 映射函数方式来构造字典
print(5, dict(zip(['one', 'two', 'three'], [1, 2, 3])))  # 5 {'one': 1, 'two': 2, 'three': 3}
print(6, dict({'x': 4, 'y': 5}))  # 6 {'x': 4, 'y': 5}
# 映射直接使用，就是常用的dict生命方式
print(7, {'x': 4, 'y': 5})  # 7 {'x': 4, 'y': 5}
# 可迭代对象方式来构造字典
print(8, dict([('one', 1), ('two', 2), ('three', 3)]))  # 6 {'one': 1, 'two': 2, 'three': 3}
# 混合使用
print(9, dict({'x': 4, 'y': 5}, z=8))  # 9 {'x': 4, 'y': 5, 'z': 8}
print(10, dict([('one', 1), ('two', 2)], three=3))  # 10 {'one': 1, 'two': 2, 'three': 3}

# ####
# frozenset([iterable]) 返回一个冻结的集合，冻结后集合不能再添加或删除任何元素。
# iterable -- 可迭代的对象，比如列表、字典、元组等等。
# ####
# 如果不提供任何参数，默认会生成空集合。
print(11, frozenset())  # 11 frozenset()
# 生成一个新的不可变集合
print(12, frozenset(range(10)))  # 12 frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
# 创建不可变集合
print(13, frozenset('millions'))

# ####
# chr(i) 用一个范围在 range（256）内的（就是0～255）整数作参数，返回一个对应的字符。
# i -- 可以是10进制也可以是16进制的形式的数字。
# ####
# 十进制
print(14, chr(48), chr(49), chr(97))  # 14 0 1 a
# 十六进制
print(15, chr(0x30), chr(0x31), chr(0x61))  # 15 0 1 a

# ####
# ord(c) 用它以一个字符（长度为1的字符串）作为参数，返回对应的 ASCII 数值，或者 Unicode 数值，如果所给的 Unicode 字符超出了你的 Python 定义范围，则会引发一个 TypeError 的异常
# c -- 字符
# ####
print(16, ord('a'), ord('A'))  # 16 97 65
print(17, ord('中'), ord('国'))  # 17 20013 22269

# hex(x)将一个整数转换为一个十六进制字符串
print(18, hex(0B1111))  # 18 0xf
print(19, hex(666))  # 19 0x29a
print(20, hex(0o567))  # 19 0x29a
# oct(x) 将一个整数转换为一个八进制字符串
